package com.dci.service.project;

import com.dci.model.project.ProjectInfo;
import com.dci.model.project.ProjectManager;
import com.dci.model.project.ProjectSchedule;
import com.dci.model.project.ProjectTaskManager;
import com.dci.param.SearchMap;
import com.dci.result.JsonData;
import com.dci.result.PageResult;
import com.dci.result.ResultInfo;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * All rights Reserved, Designed By 姑苏区政府大数据中心
 *
 * @version V1.0
 * @Title: null.java
 * @Package com.dci.service.project
 * @Description: 项目管理接口
 * @author: 张星亮
 * @date: 2019/2/25
 * @Copyright: 2019 姑苏区政府大数据中心. All rights reserved.
 * 注意：本内容仅限于姑苏区政府大数据中心内部传阅，禁止外泄以及用于其他的商业目
 */
public interface ProjectInfoService {

    /**
     * 动态新增项目信息
     *
     * @param record
     * @return
     */
    JsonData saveProjectInfo(ProjectInfo record);

    /**
     * 通过id查询
     *
     * @param selectByOutId
     * @return
     */
    List<ProjectInfo> selectByOutId(String selectByOutId);

    /**
     * 保存信息和上传文件
     *
     * @param object
     * @param path
     * @param fileNames
     * @return
     */
    JsonData uploadAndSave(String object, String path, String fileNames);

    /**
     * 修改状态
     *
     * @param projectInfo
     * @return
     */
    JsonData approvalAndSave(ProjectInfo projectInfo);

    /**
     * 根据主键查询项目信息
     *
     * @param projectInfo
     * @return
     */
    JsonData selectProjectByPrimaryKey(ProjectInfo projectInfo);

    /**
     * 查询入库管理列表
     *
     * @param record
     * @return
     */
    PageResult selectProjectPages(ProjectInfo record);

    /**
     * 动态修改项目信息
     *
     * @param record
     * @return
     */
    ResultInfo updateProjectByPrimaryKeySelective(ProjectInfo record);

    /**
     * 入库管理删除 (逻辑删除)
     *
     * @param list
     * @return
     */
    PageResult deleteProject(List<ProjectInfo> list);

    /**
     * 入库管理项目审核方法
     *
     * @param projectInfo
     * @return
     */
    ProjectInfo audit(ProjectInfo projectInfo);

    /**
     * 入库管理项目审核不通过方法
     *
     * @param projectInfo
     * @return
     */
    ProjectInfo auditFail(ProjectInfo projectInfo);

    /**
     * 入库管理,项目审批方法
     *
     * @param projectInfo
     * @return
     */
    ProjectInfo approval(ProjectInfo projectInfo);

    /**
     * 入库管理,项目审批不通过方法
     *
     * @param projectInfo
     * @return
     */
    ProjectInfo approvalFail(ProjectInfo projectInfo);

    /**
     * 入库管理,审批,项目分类修改方法
     *
     * @param projectInfo
     * @return
     */
    ProjectInfo updateProjectType(ProjectInfo projectInfo);

    /**
     * 新增项目信息
     *
     * @param record
     * @return
     */
    int insert(ProjectInfo record);

    /**
     * 根据主键新增
     *
     * @param record
     * @return
     */
    int updateByPrimaryKey(ProjectInfo record);

    /**
     * 查询在库管理列表
     *
     * @param record
     * @return
     */
    PageResult selectInStoreProjectList(ProjectInfo record);

    /**
     * 查询出库管理列表
     *
     * @param record
     * @return
     */
    PageResult getOutBoundList(ProjectInfo record);

    /**
     * 修改出库状态
     *
     * @param record
     * @return
     */
    ResultInfo updateOutStatus(ProjectInfo record);

    /**
     * 修改规划性转实施型
     *
     * @param projectInfo
     * @return
     */
    ResultInfo updateTypeById(ProjectInfo projectInfo);

    /**
     * 保存项目信息
     *
     * @param projectManager
     * @return JsonData JsonData类型
     */
    JsonData saveProtect(ProjectManager projectManager);

    /**
     * 根据条件分页查询
     *
     * @param searchMap 查询条件
     * @param pageNum   页数
     * @param pageSize  每页总数
     * @return PageResult PageResult对象
     */
    PageResult findList(SearchMap searchMap, Integer pageNum, Integer pageSize);

    /**
     * 查询入库管理列表
     *
     * @param record
     * @return
     */
    PageResult selectProjectPagesList(ProjectManager record);

    /**
     * 入库管理项目审核方法
     *
     * @param projectManager
     * @return
     */
    ProjectManager auditList(ProjectManager projectManager);

    /**
     * 入库管理项目审核不通过方法
     *
     * @param projectManager
     * @return
     */
    ProjectManager auditFailList(ProjectManager projectManager);

    /**
     * 动态修改项目信息
     *
     * @param record
     * @return
     */
    ResultInfo updateProject(ProjectManager record);

    /**
     * 任务发布
     *
     * @param projectTaskManager
     * @return JsonData JsonData类型
     */
    JsonData saveProtectList(ProjectTaskManager projectTaskManager);

    /**
     * 发布通知
     *
     * @param projectTaskManager
     * @return
     */
    JsonData SaveNotice(ProjectTaskManager projectTaskManager);

    PageResult selectProjectNoticeList(ProjectTaskManager record);

    /**
     * 根据主键查询项目信息
     *
     * @param projectTaskManager
     * @return
     */
    JsonData selectProjectByPrimaryKey(ProjectTaskManager projectTaskManager);


    /**
     * 查询未审核列表
     *
     * @param record
     * @return
     */
    PageResult getUnreviewedList(ProjectManager record);

    /**
     * 根据id删除
     *
     * @param object
     * @return
     */
    ResultInfo deleteById(String object );

    /**
     * 项目管理 进度填报
     *
     * @param projectSchedule
     * @return JsonData JsonData类型
     */
    JsonData SaveProReport(ProjectSchedule projectSchedule);

    /**
     * 项目管理 进度填报 更新
     *
     * @param projectSchedule
     * @return JsonData JsonData类型
     */
    JsonData updateProReport(ProjectSchedule projectSchedule);

    /**
     * 根据条件查询 --综合查询 补报查询
     * @param record
     * @return
     */
    PageResult queryProjectList(ProjectSchedule record);

    /**
     * 修改阅读状态
     * @param record
     * @return
     */
    ResultInfo updateReadStatus(ProjectTaskManager record);

    ResultInfo updateProject(ProjectInfo record);

    /**
     * 读取后附件上传
     * @param projectTaskManager
     * @return
     */
    JsonData UpdateNotice(ProjectTaskManager projectTaskManager);

    List<Object> FillWarning(String userId);
}